home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / sbin / rc-update < prev    next >
Text File  |  2006-04-25  |  4KB  |  196 lines

  1. #!/bin/bash
  2. # Copyright 1999-2005 Gentoo Foundation
  3. # Distributed under the terms of the GNU General Public License v2
  4.  
  5. source /sbin/functions.sh
  6.  
  7. usage() {
  8. cat << FOO
  9. usage: rc-update -a|add script runlevel2 [runlevel2 ...]
  10.        rc-update -d|del script [runlevel1 ...]
  11.        rc-update -s|show [runlevel1 ...]
  12.  
  13. note:  After rc-update executes, the script dependency cache is automatically
  14.        updated.
  15.  
  16. examples:
  17.        rc-update add net.eth0 default
  18.        Adds the net.eth0 script (in /etc/init.d) to the "default" runlevel.
  19.  
  20.        rc-update del sysklogd
  21.        Deletes the sysklogd script from all runlevels.  The original script
  22.        is not deleted, just any symlinks to the script in /etc/runlevels/*.
  23.  
  24.        rc-update del net.eth2 default wumpus
  25.        Delete the net.eth2 script from the default and wumpus runlevels.
  26.        All other runlevels are unaffected.  Again, the net.eth2 script
  27.        residing in /etc/init.d is not deleted, just any symlinks in
  28.        /etc/runlevels/default and /etc/runlevels/wumpus.
  29.  
  30.        rc-update show
  31.        Show all the available scripts and list at which runlevels they
  32.        will execute.
  33. FOO
  34.     exit 1
  35. }
  36.  
  37. add() {
  38.     local x=
  39.     local myscript=
  40.     
  41.     if [ $# -lt 3 ]
  42.     then
  43.         eerror "${0}: at least two arguments expected after \"$1\"."
  44.         exit 1
  45.     fi
  46.     shift
  47.     myscript="$1"
  48.     if [ ! -e "/etc/init.d/${myscript}" ]
  49.     then
  50.         eerror "$0: /etc/init.d/${myscript} not found; aborting."
  51.         exit 1
  52.     fi
  53.     shift
  54.     for x in $*
  55.     do
  56.         if [ ! -e "/etc/runlevels/${x}" ]
  57.         then
  58.             ewarn "runlevel ${x} not found; skipping"
  59.             continue
  60.         fi
  61.         if [ -L "/etc/runlevels/${x}/${myscript}" ]
  62.         then
  63.             ewarn "${myscript} already installed in runlevel ${x}; skipping"
  64.             continue
  65.         fi
  66.         if [ ! -x "/etc/init.d/${myscript}" ]
  67.         then
  68.             ewarn "${myscript} not executable; skipping"
  69.             continue
  70.         fi
  71.         ln -snf "/etc/init.d/${myscript}" "/etc/runlevels/${x}/${myscript}"
  72.         if [ "$?" -ne 0 ]
  73.         then
  74.             eerror "$0: failed to add ${myscript} to ${x}."
  75.             exit 1
  76.         fi
  77.         regen=1
  78.         einfo "${myscript} added to runlevel ${x}"
  79.     done
  80. }
  81.  
  82. del() {
  83.     local x=
  84.     local mylevels=
  85.     local myscript=
  86.     local remlevels=
  87.     
  88.     if [ $# -lt 2 ]
  89.     then
  90.         eerror "$0: at least one argument expected after \"$1\"."
  91.         exit 1
  92.     fi
  93.     shift
  94.     myscript=$1
  95.     shift
  96.     if [ $# -eq 0 ]
  97.     then
  98.         mylevels="`( cd /etc/runlevels; ls )`"
  99.     else
  100.         mylevels="$*"
  101.     fi
  102.     remlevels=""
  103.     for x in ${mylevels}
  104.     do
  105.         if [ -L "/etc/runlevels/${x}/${myscript}" ]
  106.         then
  107.             regen=1
  108.             rm -f "/etc/runlevels/${x}/${myscript}"
  109.             remlevels="${remlevels} ${x}"
  110.         fi
  111.     done
  112.     if [ "${remlevels}" = "" ]
  113.     then
  114.         einfo "${myscript} not found in any of the specified runlevels."
  115.     else
  116.         einfo "${myscript} removed from the following runlevels:${remlevels}"
  117.     fi
  118. }
  119.  
  120. show() {
  121.     local x=
  122.     local y=
  123.     local mylevels=
  124.     local myscripts=
  125.     
  126.     shift
  127.     if [ $# -eq 0 ]
  128.     then
  129.         mylevels="`( cd /etc/runlevels; ls )`"
  130.     else
  131.         mylevels="$*"
  132.     fi
  133.     myscripts="`( cd /etc/init.d; ls )`"
  134.  
  135.     for x in ${myscripts}
  136.     do
  137.         if [ "${x%%.sh}" = "${x}" ]
  138.         then
  139.             printf "%20s | " ${x:0:19}
  140.             for y in ${mylevels}
  141.             do
  142.                 if [ -L "/etc/runlevels/${y}/${x}" ]
  143.                 then
  144.                     echo -n "${y} "
  145.                 else
  146.                     printf "%${#y}s " " "
  147.                 fi
  148.             done
  149.             echo ""
  150.         fi
  151.     done
  152. }
  153.  
  154. check_is_root() {
  155.     if [[ ${EUID} -ne 0 ]] ; then
  156.         eerror "$0: must be root."
  157.         exit 1
  158.     fi
  159. }
  160.  
  161. if [ $# -lt 1 ]
  162. then
  163.     usage
  164.     exit 1
  165. fi
  166.  
  167. regen=0
  168.  
  169. case "$1" in
  170.     add|-a)
  171.         check_is_root
  172.         add "$@"
  173.         ;;
  174.     del|delete|-d)
  175.         check_is_root
  176.         del "$@"
  177.         ;;
  178.     show|-s)
  179.         show "$@"
  180.         ;;
  181.     *)
  182.         usage
  183.         exit 1
  184.         ;;
  185. esac
  186.  
  187. if [ "${regen}" -eq 1 ]
  188. then
  189.     # depscan doesnt actually read runlevels so no point ...
  190.     #/sbin/depscan.sh
  191.     einfo "rc-update complete."
  192. fi
  193.  
  194.  
  195. # vim:ts=4
  196.